package com.category.spi.service;

import com.category.spi.model.Category;
import com.category.spi.model.CategoryTreeDTO;

import java.util.List;

public interface CategoryService {

    //创建分类
    //顶级：level=1 path=/{id}
    //子级  level=parent.level+1 path = parent.path/{id}
    Long create(Category category);


    /*
    * 按照Id更新*/
    boolean updateById(Category category);

    /*详情*忽略已软删记录*/
    Category getById(Long id);

    /*扁平分页查询（按照名称/slug/父Id/层级/状态*/
    List<Category> pageQuery(String keyword,Long parentId,Integer level,Integer status,int page,int size);

    /*统计分页总数*/
    long count(String keyword, Long parentId, Integer level, Integer status);


   /*查询直接子类型 parentId未空时返回顶级*/
    List<Category> listChildren(Long parentId, Integer status);

    /*查询树（小数据量时组装） 返回包含children的嵌套结构*/
    List<CategoryTreeDTO> tree(Integer status);

    /*
    * 移动节点 把id节点移动到newParentId下面 或者置顶级
    * 自动更新level
    * 防环路 （不可移动自身或子孙节点）
    * 维护新旧 is_leaf*/
    boolean move(Long id,Long newParentId);

    /*软删除*/
    boolean softDelete(Long id);







}
